package com.mo.sys.dao;


import com.mo.sys.pojo.SysNotice;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/*
创建公共模块数据持久层对象，借助此类的对象基于Mybatis技术实现与数据库交互
通过这些交互来访问或操作模块的数据

建议：在springboot工程中基于mybatis实现与数据库交互时，
1.首先要定义一个数据层接口，并@Mapper注解对接口描述
2.系统启动时，对启动类所在的包以及子包中的类进行扫描，识别到@Mapper注解
3.底层基于注解接口创建其实现类（借助反射包中proxy类进行创建）
4.底层基于实现类的SqlSession，获取DataSource数据源，获取连接
 */
@Mapper
//描述数据层接口的注解用于告诉 Spring 框架此接口的实现由 mybatis 创建，并将其
//实现类对象存储到 spring 容器。
public interface SysNoticeDao {
    /*

    基于条件查询公告信息
    @param notice
    @return  查询结果
     */
    // @Select(Select * From SYS_notices where) 简单sql直接写在下面的方法上
    List<SysNotice> selectNotices(SysNotice notice);

    /*
    基于id删除公告信息
    @param   唯一标识id
    @return 基于id查询到的结果

     说明：在jdk8之前，对于接口方法，假如参数有多个或者参数类型是数组，
     不可直接在sql映射文件中使用参数名，需要注解@param
     */
    int deleteById(@Param("array") Long... id);


    /*
    持久化notice对象数据
    @param notice（封装了要写入的数据）
     @return 返回写入的行数
     */
    int insertNotices(SysNotice notice);


    /*
    基于条件查询公告信息
     @param  唯一标识id
     @return  查询结果
    */
    @Select("select *from sys_notices where id=#{id}")  //简单sql直接在方法
    SysNotice findById(Long id);

    /*
    持久化notice对象数据
    @param notice（封装了要更新的数据）
     @return 返回更新的行数
     */
    int updateNotices(SysNotice notice);

}
